{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "7332a2d0-10c9-40f2-8bda-9a2ec630f13f",
   "metadata": {},
   "source": [
    "Chapter 21\n",
    "# 有向图度矩阵\n",
    "Book_6《数据有道》 | 鸢尾花书：从加减乘除到机器学习"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "ac43e145-b958-4c37-be88-32516fe9bdf0",
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import networkx as nx\n",
    "import numpy as np\n",
    "import seaborn as sns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "8aa6b49e-bbb9-48e1-94ca-6034b04f6fe3",
   "metadata": {},
   "outputs": [],
   "source": [
    "G = nx.DiGraph()\n",
    "# 创建有向图的实例"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "6d040088-8f36-4e83-9203-4536c4d8188a",
   "metadata": {},
   "outputs": [],
   "source": [
    "G.add_nodes_from(['a', 'b', 'c', 'd'])\n",
    "# 添加多个顶点"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "f37a2cdf-1e76-4a46-bf35-5492af13e615",
   "metadata": {},
   "outputs": [],
   "source": [
    "G.add_edges_from([('b','a'),('c','b'),\n",
    "                  ('b','d'),('d','c'),\n",
    "                  ('a','c')])\n",
    "# 增加一组有向边"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "135de57a-48aa-4d48-9131-62deabb7f6d5",
   "metadata": {},
   "source": [
    "## 入度矩阵"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "c2821e08-e748-41bd-9288-d73c02c145b1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "InDegreeView({'a': 1, 'b': 1, 'c': 2, 'd': 1})"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "D_in = G.in_degree()\n",
    "D_in"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "519ea36a-bdf0-4225-9bd2-50eafd8d3100",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1, 0, 0, 0],\n",
       "       [0, 1, 0, 0],\n",
       "       [0, 0, 2, 0],\n",
       "       [0, 0, 0, 1]])"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "D_in = np.diag(list(dict(D_in).values()))\n",
    "D_in"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "fccbafd1-66d6-48ac-ba4a-16ae7984afd2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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CFBSUpLy8/Pr9VivvvqqJkyYoCuuuMJtfMOGDWrbtq3i4uL0y1/+skH7HxqUxEtKShQTE2MZb9OmjYqL63617nA4FBoa6naYIqx1mAIDAy2LXVZWpsjISD9F1bSx5v7xu9nj9eNhvZU8bZEOHTnh73CaNJ7j9RPgxaO2PORwOCyPeezYMVVXVysqKsptPCoqSiUlJXXGvHXrVu3atUtTp051Gx85cqRWrFihvLw8PfPMM9q4caNGjRql6upqD1akgUn8qquu0l//+lfL+F//+lfFxsbWeX56erpOnjzpdpiieVCQevTspYIt370Cq6mpUUFBvvrG9/djZE0Xa+57v5s9XrfcEK+R0xfpq8Psjv6h8Ryvn9o2izX0qC0Ppaenez3mV199VX369NGgQYPcxidMmKBbbrlFffr0UUpKit577z397W9/04YNGzy6foM+sW3atGmaOXOmzp49qxtuuEGSlJeXp1mzZunBBx+s83y73S673d6Qh24U7kydrDm/ma1evXqrd5++evON13X69GmljB3n79CaLNbcdxam36bbRw3U+F8vVXnFGUVFXClJOll+Rmcqz/o5uqaL57hv1TcPRUZGKjAwUKWlpW7jpaWlio6Ovui5FRUVysnJ0eOPP17n43Tp0kWRkZHat2+fbrzxxjrnn9egJP7www+rrKxM9957r6qqqiRJwcHBmj179g/ySqaxGTnqxzr+9ddasniRjh07qrjuPbTk5WWKoO31g2HNfWf6bf8lSfpw2Uy38Wlz39CbfyzwQ0SXB57jdfPH27uDgoI0YMAA5eXlKSUlRdK5LkleXp7uu+++i567Zs0aVVZW6uc//3mdj3Pw4EGVlZXVeqv6YmxOp9Pp0Rn/oby8XF988YVCQkLUrVu3S6qubTabTp9tcCjwQEjzc/8UWG/fOb/mwf1m+DmSy8OZnZmSeI77Skhzmy4hldTbm9sPeu1aPx/Qvt5zV61apdTUVL388ssaNGiQFi5cqNWrV+vvf/+7oqKiNGnSJLVr185yT33YsGFq166dcnJy3MbLy8s1b9483XrrrYqOjtb+/fs1a9YsffPNN/rss888yqWX9AUoLVu21LXXXnsplwAAoF789UFrt99+u44ePaq5c+eqpKRE/fr1U25urmuzW1FRkQIC3LeY7dmzR5s3b9YHH3xguV5gYKA+/fRTvf766zpx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ue6dt2zZUi1btlR5ebnmzZunW2+9VdHR0dq/f79mzZqlrl27Kjk52aPYbE6n09nQP1hFRYX2798vSbr66qt1xRVXNPRSstlsOn22waHAAyHNz/1LYL19hzX3rfPrfe/a3X6O5PKwZFxPXUIqqbeir733rqYO4Z7d/168eLGeffZZlZSUqF+/flq0aJESEhIkScOHD1enTp2UnZ0tSerUqZO++uoryzUyMjL02GP/7mqlpGjHjh06ceKEYmNjdfPNN+uJJ56wbKCryyUlcW8iifsOCcX3WHPfIon7lq+S+D+9mMSv8jCJN1bccAEAGIFvMbPiY1cBADAUlTgAwBCU4t9HEgcAGIF2uhXtdAAADEUlDgAwAoW4FUkcAGAE2ulWtNMBADAUlTgAwAiefOb55YIkDgAwAzncgiQOADACOdyKe+IAABiKShwAYAR2p1uRxAEARmBjmxXtdAAADEUlDgAwA4W4BUkcAGAEcrgV7XQAAAxFJQ4AMAK7061I4gAAI7A73Yp2OgAAhqISBwAYgXa6FZU4AACGohIHABiBStyKShwAAENRiQMAjMDudCuSOADACLTTrWinAwBgKCpxAIARKMStSOIAADOQxS1opwMAYCgqcQCAEdidbkUSBwAYgd3pVrTTAQAwFJU4AMAIFOJWJHEAgBnI4ha00wEARrB58T9PZWZmqlOnTgoODlZCQoK2bt160flr1qxR9+7dFRwcrD59+uj99993+73T6dTcuXMVExOjkJAQJSUlae/evR7HRRIHAOAiVq1apbS0NGVkZKiwsFDx8fFKTk7WkSNHap3/8ccfa+LEiZoyZYp27NihlJQUpaSkaNeuXa458+fP16JFi5SVlaWCggJdccUVSk5O1pkzZzwLztlISOLg4ODgMPTwhdNnvXecOXPGefLkSbfjzJkztT7uoEGDnDNmzHD9XF1d7YyNjXU6HI5a5992223O0aNHu40lJCQ4p0+f7nQ6nc6amhpndHS089lnn3X9/sSJE0673e586623PFqTRlOJO51O444zZ84oIyNDZ86c8Xssl8PBerPmTf0web19IbiZ9w6Hw6HQ0FC3w+FwWB6zqqpK27dvV1JSkmssICBASUlJys/PrzXO/Px8t/mSlJyc7Jp/4MABlZSUuM0JDQ1VQkLCBa95IY0miZuosrJS8+bNU2Vlpb9DuSyw3r7HmvsW6+076enpOnnypNuRnp5umXfs2DFVV1crKirKbTwqKkolJSW1XrukpOSi88//ryfXvBB2pwMALjt2u112u93fYVwyKnEAAC4gMjJSgYGBKi0tdRsvLS1VdHR0redER0dfdP75//XkmhdCEgcA4AKCgoI0YMAA5eXlucZqamqUl5enxMTEWs9JTEx0my9JH374oWt+586dFR0d7Tbn1KlTKigouOA1L4R2+iWw2+3KyMhoEi0ZE7Devsea+xbr3TilpaUpNTVVAwcO1KBBg7Rw4UJVVFRo8uTJkqRJkyapXbt2ro1xDzzwgK6//no9//zzGj16tHJycrRt2zYtXbpUkmSz2TRz5kw9+eST6tatmzp37qw5c+YoNjZWKSkpngXnBAAAF/Xiiy86O3To4AwKCnIOGjTIuWXLFtfvrr/+emdqaqrb/NWrVzuvueYaZ1BQkLNXr17O9evXu/2+pqbGOWfOHGdUVJTTbrc7b7zxRueePXs8jsvmdProvQEAAMCruCcOAIChSOIAABiKJA4AgKFI4mj0hg8frpkzZ/o7DMCneN6jPkjiAAAYiiQOAIChSOINkJubq6FDh6p169aKiIjQT37yE+3fv9/fYTVp3377re677z6FhoYqMjJSc+bM8dk3J12uampqNH/+fHXt2lV2u10dOnTQU0895e+wmqSKigpNmjRJLVu2VExMjJ5//nl/hwRDkMQboKKiQmlpadq2bZvy8vIUEBCgsWPHqqamxt+hNVmvv/66mjVrpq1bt+qFF17QggULtGzZMn+H1aSlp6fr6aef1pw5c7R7926tXLnS8q1L8I6HH35YGzdu1LvvvqsPPvhAGzZsUGFhob/DggH4sBcvOHbsmNq0aaPPPvtMvXv39nc4Tc7w4cN15MgRff7557LZbJKkRx55RH/4wx+0e/duP0fXNH3zzTdq06aNFi9erKlTp/o7nCatvLxcERERevPNNzV+/HhJ0tdff6327dvr7rvv1sKFC/0bIBo1KvEG2Lt3ryZOnKguXbqoVatW6tSpkySpqKjIv4E1YYMHD3YlcOncFwzs3btX1dXVfoyq6friiy9UWVmpG2+80d+hNHn79+9XVVWVEhISXGPh4eGKi4vzY1QwBV+A0gBjxoxRx44d9corryg2NlY1NTXq3bu3qqqq/B0a4BUhISH+DgFAPVCJe6isrEx79uzRo48+qhtvvFE9evTQ8ePH/R1Wk1dQUOD285YtW9StWzcFBgb6KaKmrVu3bgoJCbF8nSK87+qrr1bz5s3dnuPHjx/XP/7xDz9GBVNQiXsoLCxMERERWrp0qWJiYlRUVKRHHnnE32E1eUVFRUpLS9P06dNVWFioF198kR28P6Dg4GDNnj1bs2bNUlBQkK677jodPXpUn3/+uaZMmeLv8JqUli1basqUKXr44YcVERGhtm3b6n/+538UEECNhbqRxD0UEBCgnJwc/epXv1Lv3r0VFxenRYsWafjw4f4OrUmbNGmSTp8+rUGDBikwMFAPPPCA7r77bn+H1aTNmTNHzZo109y5c3X48GHFxMTonnvu8XdYTdKzzz6r8vJyjRkzRldeeaUefPBBnTx50t9hwQDsTgcAwFD0awAAMBRJHAAAQ5HEAQAwFEkcAABDkcQBADAUSRwAAEORxAEAMBRJHAAAQ5HEAQAwFEkcAABDkcQBADDU/wekNwZKbbzEgwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.heatmap(D_in, cmap = 'Blues', \n",
    "            annot = True, fmt = '.0f',\n",
    "            xticklabels = list(G.nodes), \n",
    "            yticklabels = list(G.nodes),\n",
    "            linecolor = 'k', square = True,\n",
    "            linewidths = 0.2)\n",
    "plt.savefig('入度矩阵.svg')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ed6db007-30e6-4d13-ab49-c4b7b05d2f57",
   "metadata": {},
   "source": [
    "## 出度矩阵"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "da3cf9e8-237f-4469-997f-b60edaffa918",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "OutDegreeView({'a': 1, 'b': 2, 'c': 1, 'd': 1})"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "D_out = G.out_degree()\n",
    "D_out"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "c1118f36-4287-4482-b5e9-d1e9e816becd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1, 0, 0, 0],\n",
       "       [0, 2, 0, 0],\n",
       "       [0, 0, 1, 0],\n",
       "       [0, 0, 0, 1]])"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "D_out = np.diag(list(dict(D_out).values()))\n",
    "D_out"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "cbb663ea-ce84-4dff-a18d-80ee1c69d987",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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1IIFC1RRUeHarV5fJHEAAC5i27ZtGj58uOvn8/fS09LSlJ2dreLiYhUVFbl+X1VVpQcffFCHDh1Ss2bN1Lt3b/3v//6v2zVuu+02HT16VHPmzFFJSYn69u2r3Nxcy2a3uticTmej2Plhs9nYhOIjbGzzPTa2+RYb23wrrKlNvkgl18zM9dq1/jFvpNeu5U9U4gAAI/AFKFZsbAMAwFBU4gAAI1CIW5HEAQBGCAoii38f7XQAAAxFJQ4AMALtdCuSOADACOxOt6KdDgCAoajEAQBGoBC3IokDAIxAO92KJA4AMAJJ3Ip74gAAGIpKHABgBApxK5I4AMAItNOtaKcDAGAoKnEAgBEoxK1I4gAAI9BOt6KdDgCAoajEAQBGoBC3IokDAIxAO92KdjoAAIaiEgcAGIFC3IokDgAwAu10K5I4AMAI5HAr7okDAGAoKnEAgBFop1uRxAEARiCHW9FOBwDAUFTiAAAj0E63IokDAIxADreinQ4AgKGoxAEARqCdbkUSBwAYgSRuRTsdAABDkcQbKGfl7zXqpht0bb9eun3CeH326af+DilgPfSLEdr85sM6svk5fZXn0Or509SlfWt/hxXweI77Hmt+cTab945AQRJvgNw/va/n5jl0973TlbPmHSUkdNUv756isrIyf4cWkIb+qLOyVm3S9ZOe009+uUhNmgTrvZfuU7PQEH+HFrB4jvsea143m83mtSNQkMQb4I3XX9O4n92q1LG36OrOnfVo5lyFhoZq3dq3/R1aQPrpfUv05h8L9MWXJfrsH4d0V+abahcXqX7dr/J3aAGL57jvseZ181clvmnTJo0ZM0bx8fGy2Wxat27dReevXbtWN910k1q1aqUWLVooKSlJf/7zn93mPPbYY5YXFl27dvVwRUjiHjtbVaUvdn+uQUmDXWNBQUEaNGiwPv1khx8ju3y0aB4qSTp+8l9+jiQw8Rz3Pda8cauoqFCfPn20ePHies3ftGmTbrrpJr3//vvavn27hg8frjFjxmjHDve/yx49eqi4uNh1bN682ePYLnl3utPplOTZrsHKykpVVlZe6kP7xfETx1VdXa2oqCi38aioKB048KWforp82Gw2PfvQz/Txjv3avb/Y3+EEJJ7jvsea14832+C15SG73S673W6ZO2rUKI0aNare116wYIHbz7/97W/17rvv6o9//KP69evnGm/SpIliY2M9C/x7GlyJv/rqq+rZs6dCQ0MVGhqqnj17atmyZfU61+FwKDw83O0A6mNBxq3q0TlOkx55zd+hAPAxb7bTa8tDDofjB4m7pqZG33zzjSIjI93G9+7dq/j4eHXq1Em33367ioqKPL52gyrxOXPmaP78+br//vuVlJQkScrPz9evf/1rFRUV6fHHH7/o+RkZGUpPT3cbMyWRR7SMUHBwsGWzSVlZmaKjo/0U1eXhd7PG68dDeyp5ygIdOnLC3+EELJ7jvsea+15teai2KtwbnnvuOZWXl+vWW291jSUmJio7O1sJCQkqLi7W3LlzNXToUO3atUtXXnllva/doCT+0ksv6ZVXXtHEiRNdYzfffLN69+6t+++/v84kfqGWhQmahoSoW/ceKtiSrxtuTJZ07lVWQUG+Jkz8uZ+jC1y/mzVeN9/QRyOmvaCvDrNb94fEc9z3WPP6CfJiO91XeWjlypWaO3eu3n33XbVu/d1bY/+zPd+7d28lJiaqffv2Wr16taZMmVLv6zcoiZ89e1YDBgywjPfv31/ffvttQy5plDvSJmv2b2apR4+e6tmrt95843WdPn1aqWPH+Tu0gLQg41bdNmqAxv96qcorzigm6tyr1JPlZ3Sm8qyfowtMPMd9jzWvm2nvDMvJydHUqVO1Zs0aJScnX3Ruy5Ytdc0112jfvn0ePUaDkvgdd9yhl156SfPnz3cbX7p0qW6//faGXNIoI0f9WMe//lpLFi3UsWNHldC1m5a8vExRtL1+EHff+l+SpA+XzXAbnzbnDb35xwI/RBT4eI77HmseWN566y394he/UE5OjkaPHl3n/PLycu3fv1933HGHR49jc57fXl6H/7x38O233yo7O1vt2rXToEGDJEkFBQUqKirSpEmT9OKLL3oUhHRu1+Hps/UKBZcorOm5l7Ohfaf7OZLLx5md596awnPcN84/x1lv3whralM9U8klSVnivRftf743sd5zy8vLXRVyv379NH/+fA0fPlyRkZFq166dMjIydOjQIa1YsULSuRZ6WlqaXnjhBY0b910nJSwszLX/66GHHtKYMWPUvn17HT58WJmZmdq5c6d2796tVq1a1Tu2elfi339/W//+/SVJ+/fvlyRFR0crOjpan3/+eb0fHACA+gryUzt927ZtGj58uOvn80VtWlqasrOzVVxc7LazfOnS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6NDBde+8efPmat68ucrLyzV37lzdcsstio2N1f79+zVz5kx17txZKSkpHsVmczqdzob+wSoqKrR//35J0tVXX60rrriioZeSzWbT6bMNDgUeCGt67l8C6+07rLlvnV/ve9fu9nMkl4cl47rrElJJvRV97b13NbWL9Oz+96JFi/Tss8+qpKREffv21cKFC5WYmChJGjZsmDp06KDs7GxJUocOHfTVV19ZrpGZmanHHvt3Vys1VTt27NCJEycUHx+vESNG6IknnrBsoKvLJSVxbyKJ+w4JxfdYc98iifuWr5L4P72YxK/yMIk3VtxwAQAYgW8xs+JjVwEAMBSVOADAEJTi30cSBwAYgXa6Fe10AAAMRSUOADAChbgVSRwAYATa6Va00wEAMBSVOADACJ585vnlgiQOADADOdyCJA4AMAI53Ip74gAAGIpKHABgBHanW5HEAQBGYGObFe10AAAMRSUOADADhbgFSRwAYARyuBXtdAAADEUlDgAwArvTrUjiAAAjsDvdinY6AACGohIHABiBdroVlTgAAIaiEgcAGIFK3IpKHAAAQ1GJAwCMwO50K5I4AMAItNOtaKcDAGAoKnEAgBEoxK1I4gAAM5DFLWinAwBgKCpxAIAR2J1uRRIHABiB3elWtNMBADAUlTgAwAgU4lYkcQCAGcjiFrTTAQBGsHnxP08tXrxYHTp0UGhoqBITE7V169aLzl+zZo26du2q0NBQ9erVS++//77b751Op+bMmaO4uDiFhYUpOTlZe/fu9TgukjgAABexatUqpaenKzMzU4WFherTp49SUlJ05MiRWud//PHHmjhxoqZMmaIdO3YoNTVVqamp2rVrl2vOvHnztHDhQmVlZamgoEBXXHGFUlJSdObMGc+CczYSkjg4ODg4DD184fRZ7x1nzpxxnjx50u04c+ZMrY87cOBA5/Tp010/V1dXO+Pj450Oh6PW+bfeeqtz9OjRbmOJiYnOu+++2+l0Op01NTXO2NhY57PPPuv6/YkTJ5x2u9351ltvebQmjaYSdzqdxh1nzpxRZmamzpw54/dYLoeD9WbNA/0web19IbSJ9w6Hw6Hw8HC3w+FwWB6zqqpK27dvV3JysmssKChIycnJys/PrzXO/Px8t/mSlJKS4pp/4MABlZSUuM0JDw9XYmLiBa95IY0miZuosrJSc+fOVWVlpb9DuSyw3r7HmvsW6+07GRkZOnnypNuRkZFhmXfs2DFVV1crJibGbTwmJkYlJSW1XrukpOSi88//ryfXvBB2pwMALjt2u112u93fYVwyKnEAAC4gOjpawcHBKi0tdRsvLS1VbGxsrefExsZedP75//XkmhdCEgcA4AJCQkLUv39/5eXlucZqamqUl5enpKSkWs9JSkpymy9JH374oWt+x44dFRsb6zbn1KlTKigouOA1L4R2+iWw2+3KzMwMiJaMCVhv32PNfYv1bpzS09OVlpamAQMGaODAgVqwYIEqKio0efJkSdKkSZPUpk0b18a4Bx54QNdff72ef/55jR49Wjk5Odq2bZuWLl0qSbLZbJoxY4aefPJJdenSRR07dtTs2bMVHx+v1NRUz4JzAgCAi3rxxRed7dq1c4aEhDgHDhzo3LJli+t3119/vTMtLc1t/urVq53XXHONMyQkxNmjRw/n+vXr3X5fU1PjnD17tjMmJsZpt9udN954o3PPnj0ex2VzOn303gAAAOBV3BMHAMBQJHEAAAxFEgcAwFAkcTR6w4YN04wZM/wdBuBTPO9RHyRxAAAMRRIHAMBQJPEGyM3N1ZAhQ9SyZUtFRUXpJz/5ifbv3+/vsALat99+q/vuu0/h4eGKjo7W7NmzffbNSZermpoazZs3T507d5bdble7du301FNP+TusgFRRUaFJkyapefPmiouL0/PPP+/vkGAIkngDVFRUKD09Xdu2bVNeXp6CgoI0duxY1dTU+Du0gPX666+rSZMm2rp1q1544QXNnz9fy5Yt83dYAS0jI0NPP/20Zs+erd27d2vlypWWb12Cdzz88MPauHGj3n33XX3wwQfasGGDCgsL/R0WDMCHvXjBsWPH1KpVK3322Wfq2bOnv8MJOMOGDdORI0f0+eefy2azSZIeeeQR/eEPf9Du3bv9HF1g+uabb9SqVSstWrRIU6dO9Xc4Aa28vFxRUVF68803NX78eEnS119/rbZt2+quu+7SggUL/BsgGjUq8QbYu3evJk6cqE6dOqlFixbq0KGDJKmoqMi/gQWwQYMGuRK4dO4LBvbu3avq6mo/RhW4vvjiC1VWVurGG2/0dygBb//+/aqqqlJiYqJrLDIyUgkJCX6MCqbgC1AaYMyYMWrfvr1eeeUVxcfHq6amRj179lRVVZW/QwO8IiwszN8hAKgHKnEPlZWVac+ePXr00Ud14403qlu3bjp+/Li/wwp4BQUFbj9v2bJFXbp0UXBwsJ8iCmxdunRRWFiY5esU4X1XX321mjZt6vYcP378uP7xj3/4MSqYgkrcQxEREYqKitLSpUsVFxenoqIiPfLII/4OK+AVFRUpPT1dd999twoLC/Xiiy+yg/cHFBoaqlmzZmnmzJkKCQnRddddp6NHj+rzzz/XlClT/B1eQGnevLmmTJmihx9+WFFRUWrdurX+53/+R0FB1FioG0ncQ0FBQcrJydGvfvUr9ezZUwkJCVq4cKGGDRvm79AC2qRJk3T69GkNHDhQwcHBeuCBB3TXXXf5O6yANnv2bDVp0kRz5szR4cOHFRcXp3vuucffYQWkZ599VuXl5RozZoyuvPJKPfjggzp58qS/w4IB2J0OAICh6NcAAGAokjgAAIYiiQMAYCiSOAAAhiKJAwBgKJI4AACGIokDAGAokjgAAIYiiQMAYCiSOAAAhiKJAwBgqP8PJHUE82DFnBsAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.heatmap(D_out, cmap = 'Blues', \n",
    "            annot = True, fmt = '.0f',\n",
    "            xticklabels = list(G.nodes), \n",
    "            yticklabels = list(G.nodes),\n",
    "            linecolor = 'k', square = True,\n",
    "            linewidths = 0.2)\n",
    "plt.savefig('出度矩阵.svg')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
